package internal

import (
	// "encoding/binary"
	"reflect"
	// "server/MergeConst"
	// "server/game"
	"server/msg"
	// "strings"

	"server/pkg/github.com/name5566/leaf/gate"
	"server/pkg/github.com/name5566/leaf/log"
	//"bytes"
	//"encoding/gob"
	// "github.com/golang/protobuf/proto"
)

func init() {
	// 向当前模块（game 模块）注册 Hello 消息的消息处理函数 handleHello
	//handler(&msg.Hello{}, handleHello)

}

func handler(m interface{}, h interface{}) {
	skeleton.RegisterChanRPC(reflect.TypeOf(m), h)
}
func HandleClientReq(args []interface{}) {

	// m := args[0].(*msg.ClientReq)
	// // 消息的发送者
	// a := args[1].(gate.Agent)
	// _, ok := agents[a]
	// if ok {
	// 	log.Debug("消息的发送者")
	// }
	// buf := m.GetInfo()

	// switch m.GetFunc() {
	// case "ReqRegisterAccount":
	// 	detail := &msg.ReqRegisterAccount{}
	// 	proto.Unmarshal(buf, detail)
	// 	gl := new(GameLogic)
	// 	if gl.IsExsitAccount(detail.UserName) {
	// 		ResRegisterAccount := &msg.ResRegisterAccount{}
	// 		ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_Exist
	// 		data, _ := proto.Marshal(ResRegisterAccount)
	// 		gl.PackResInfo(a, "ClientRes", data)
	// 		break
	// 	}
	// 	if strings.Count(detail.UserPwd, "")-1 < 6 {
	// 		ResRegisterAccount := &msg.ResRegisterAccount{}
	// 		ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_OR_PWD_Short
	// 		data, _ := proto.Marshal(ResRegisterAccount)
	// 		gl.PackResInfo(a, "ClientRes", data)

	// 		break
	// 	}
	// 	gl.Db_AccountInfo.UserName = detail.UserName
	// 	gl.Db_AccountInfo.UserPassword = detail.UserPwd
	// 	if gl.NewAccountInsertDataToDB() == false {
	// 		ResRegisterAccount := &msg.ResRegisterAccount{}
	// 		ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_Fail
	// 		data, _ := proto.Marshal(ResRegisterAccount)
	// 		gl.PackResInfo(a, "ClientRes", data)

	// 		break
	// 	}
	// case "ReqLogin":
	// 	detail := &msg.ReqLogin{}
	// 	proto.Unmarshal(buf, detail)
	// default:
	// }

}

// func HandleClientReq(args []interface{}) {
// // 收到的 Hello 消息
// m := args[0].(*msg.ClientReq)
// // 消息的发送者
// a := args[1].(gate.Agent)
// _, ok := agents[a]
// if ok {
// 	log.Debug("消息的发送者")
// }
// buf := m.GetInfo()

// detail := &msg.UseItemRequest{}
// proto.Unmarshal(buf, detail)

// for i := 0; i < len(detail.Price); i++ {
// 	log.Debug("detail.Price[i].Num %v", detail.Price[i].Num)
// }
// for i := 0; i < len(detail.Items); i++ {
// 	log.Debug("detail.Items[i].Id %v", detail.Items[i].Id)
// 	log.Debug("detail.Items[i].Quantity %v", detail.Items[i].Quantity)
// }
// for k, v := range detail.Attrs {
// 	log.Debug("detail.Items[%v].Id %v", k, v)
// }
// log.Debug("ItemId %v", detail.ItemId)
// log.Debug("HandleClientReq %v", m.GetFunc())

// response := &msg.ClientRes{}
// response.Func = "fun"
// response.Cid = "cid"
// UseItemRes := &msg.UseItemResponse{}
// UseItemRes.Code = 1
// UseItemRes.ItemId = 101001
// UseItemRes.Quantity = 3
// item := &msg.Item{}
// item.Id = 101
// item.Quantity = 1
// UseItemRes.Items = append(UseItemRes.Items, item)

// item1 := &msg.Item{}
// item1.Id = 102
// item1.Quantity = 3
// UseItemRes.Items = append(UseItemRes.Items, item1)

// IntP := &msg.IntPack{}
// IntP.Num = 2
// UseItemRes.Price = append(UseItemRes.Price, IntP)

// IntP1 := &msg.IntPack{}
// IntP1.Num = 3
// UseItemRes.Price = append(UseItemRes.Price, IntP1)
// UseItemRes.Attrs = make(map[int32]string)
// UseItemRes.Attrs[5] = "xin"
// UseItemRes.Attrs[8] = "xin1"
// data, _ := proto.Marshal(UseItemRes)
// //data, _ := UseItemRes.Descriptor()
// response.Info = data

// // 消息的发送者
// responseBData, _ := proto.Marshal(response)
// // a := args[1].(gate.Agent)
// m1 := make([]byte, 4+len(responseBData))

// // 默认使用大端序
// binary.BigEndian.PutUint32(m1, uint32(len(responseBData)))

// copy(m1[4:], responseBData)

// // 输出收到的消息的内容
// log.Debug("hello")

// // 给发送者回应一个 Hello 消息
// a.WriteMsg(response)
// }

func handleHello(args []interface{}) {
	// 收到的 Hello 消息
	m := args[0].(*msg.Hello)
	// 消息的发送者
	a := args[1].(gate.Agent)

	// 输出收到的消息的内容
	log.Debug("hello %v", m.Name)

	// 给发送者回应一个 Hello 消息
	a.WriteMsg(&msg.Hello{
		Name: "client",
	})
}
